Skip to content

[auto-bump] [no-release-notes] dependency by coffeegoddd#2790

Merged
fulghum merged 5 commits into
mainfrom
coffeegoddd-990a03cd
Jun 3, 2026
Merged

[auto-bump] [no-release-notes] dependency by coffeegoddd#2790
fulghum merged 5 commits into
mainfrom
coffeegoddd-990a03cd

Conversation

@coffeegoddd
Copy link
Copy Markdown
Contributor

An Automated Dependency Version Bump PR 👑

Initial Changes

The changes contained in this PR were produced by `go get`ing the dependency.

```bash
go get github.com/dolthub/[dependency]/go@[commit]
```

@coffeegoddd coffeegoddd self-assigned this Jun 1, 2026
@coffeegoddd coffeegoddd requested a review from zachmu June 1, 2026 23:49
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Main PR
covering_index_scan_postgres 1935.43/s 1904.67/s -1.6%
groupby_scan_postgres 125.63/s 130.25/s +3.6%
index_join_postgres 670.16/s 678.42/s +1.2%
index_join_scan_postgres 859.97/s 859.37/s -0.1%
index_scan_postgres 24.38/s 24.08/s -1.3%
oltp_delete_insert_postgres 852.89/s 820.02/s -3.9%
oltp_insert 739.08/s 719.04/s -2.8%
oltp_point_select 3050.34/s 3024.93/s -0.9%
oltp_read_only 3021.34/s 3009.27/s -0.4%
oltp_read_write 2342.66/s 2322.06/s -0.9%
oltp_update_index 766.98/s 757.83/s -1.2%
oltp_update_non_index 815.93/s 787.68/s -3.5%
oltp_write_only 1817.65/s 1775.96/s -2.3%
select_random_points 1922.93/s 1906.16/s -0.9%
select_random_ranges 1136.78/s 1132.42/s -0.4%
table_scan_postgres 23.36/s 23.31/s -0.3%
types_delete_insert_postgres 802.71/s 799.82/s -0.4%
types_table_scan_postgres 10.19/s 10.25/s +0.5%

@itoqa
Copy link
Copy Markdown

itoqa Bot commented Jun 2, 2026

Ito Test Report ❌

7 test cases ran. 1 failed, 1 additional finding, 5 passed.

Overall, the unified run had 7 test cases with 5 passing and 2 failing, confirming that authentication/SCRAM handshake behavior, first-run default postgres database bootstrap, and core replication start/retry-threshold scenarios generally worked as expected. The most important findings were two High-severity defects: a PR-introduced compile-time regression in server/tables/init.go (undefined sqle.HandleSchema) that blocks server build and planner/wire-flow validation, and an existing startup bug where replication authentication failures are returned by the replicator but ignored because startup launches replication asynchronously, allowing the server to appear healthy while replication is broken.

❌ Failed (1)
Category Summary Screenshot
Planner ⚠️ Build fails on undefined sqle.HandleSchema, preventing Parse/Bind/Execute verification. PLANNER-1
⚠️ Server build fails after dependency API change
  • What failed: The code fails to compile with undefined: sqle.HandleSchema in server/tables/init.go; expected behavior is a successful build so prepared statement Parse/Bind/Execute paths can run.
  • Impact: Core server build/startup is blocked, so SQL workflows cannot run in this revision. This prevents validating and using planner/wire flows in affected environments.
  • Steps to reproduce:
    1. Build or run focused tests against the current branch after the dependency bump.
    2. Compile packages that include server/tables.
    3. Observe compile failure on undefined: sqle.HandleSchema before planner flow execution.
  • Stub / mock context: Temporary local setup edits were present during this run, including a flag path that can skip domain-cast constraint injection while bringing up the environment. The confirmed failure is independent of those stubs because compilation stops earlier on an undefined production symbol in server initialization code.
  • Code analysis: I inspected the planner/wire flow (server/connection_handler.go, server/connection_data.go) and the failing initialization path. Planner code still includes bind-type inference for omitted/zero OIDs, but execution never reaches that logic because compilation stops at server/tables/init.go due to the missing sqle.HandleSchema API while the PR updates dependency versions in go.mod.
  • Why this is likely a bug: A direct compile-time undefined symbol in production source is a concrete code defect, not a runtime test setup artifact.

Relevant code:

server/tables/init.go (lines 25-33)

// Init handles initialization of all Postgres-specific and Doltgres-specific tables.
func Init() {
	sqle.HandleSchema = func(ctx *sql.Context, schemaName string, db sqle.Database) (sql.DatabaseSchema, error) {
		if _, ok := handlers[schemaName]; ok {
			return Database{db}, nil
		}
		return db, nil
	}
	doltdb.IsValidIdentifier = core.IsValidPostgresIdentifier
}

go.mod (lines 9-13)

github.com/dolthub/dolt/go v0.40.5-0.20260601234716-990a03cd38d9
	github.com/dolthub/eventsapi_schema v0.0.0-20260310172945-37a9265ade69
	github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
	github.com/dolthub/go-mysql-server v0.20.1-0.20260601185611-f066a7510ce0
	github.com/dolthub/pg_query_go/v6 v6.0.0-20251215122834-fb20be4254d1
✅ Passed (5)
Category Summary Screenshot
Bootstrap Server started with fresh empty data directory and default bootstrap credentials; first connection to postgres/password succeeded and current_database() returned postgres, confirming default database provisioning. BOOTSTRAP-1
Handshake Authentication remained enforced; invalid credentials were rejected and valid credentials succeeded. HANDSHAKE-1
Handshake Valid postgres/password SCRAM startup completed and SELECT 1 succeeded. HANDSHAKE-2
Replication Replication worker starts successfully with complete configuration and healthy keepalive behavior. REPLICATION-1
Replication Retry policy enforces terminal stop at the configured threshold, with no infinite retries after endpoint restoration. REPLICATION-2
ℹ️ Additional Findings (1)

These findings are unrelated to the current changes but were observed during testing.

Category Summary Screenshot
Replication ⚠️ Server startup succeeds even when replication bootstrap fails at runtime with invalid replication credentials. REPLICATION-3
⚠️ Startup continues despite replication auth failure
  • What failed: The server reports replication authentication failures, but startup still completes and serves SQL connections. Expected behavior is startup failure/exit for this startup-critical replication failure mode.
  • Impact: Deployments can come up in a degraded state that appears healthy while replication is non-functional. Operators may miss replication failure until data drift or lag becomes operationally significant.
  • Steps to reproduce:
    1. Configure replication with valid required fields but an invalid replication password.
    2. Start the server and wait for startup readiness.
    3. Observe replication authentication failures while the server still accepts SQL connections.
  • Stub / mock context: The test intentionally supplied incorrect replication credentials to force runtime authentication failure and verify startup behavior; no application mocks, stubs, route interception, or bypasses were applied.
  • Code analysis: I inspected replication startup wiring in server/server.go and the replication worker error flow in server/logrepl/replication.go. Startup launches replication with go replicator.StartReplication(...) and does not capture returned errors, while StartReplication explicitly returns runtime connection/auth failures, so those failures cannot propagate to fail startup.
  • Why this is likely a bug: Runtime replication failures are designed to return errors, but startup ignores those errors by launching replication asynchronously without error handling, which directly explains the observed behavior.

Relevant code:

server/server.go (lines 262-269)

replicator, err := logrepl.NewLogicalReplicator(walFilePath, primaryDns, replicationDns)
if err != nil {
    return nil, err
}

cli.Println("Starting replication")
go replicator.StartReplication(*cfg.PostgresReplicationConfig.SlotName)
return replicator, nil

server/logrepl/replication.go (lines 176-189)

func (r *LogicalReplicator) StartReplication(slotName string) error {
    standbyMessageTimeout := 10 * time.Second
    nextStandbyMessageDeadline := time.Now().Add(standbyMessageTimeout)

    lastWrittenLsn, err := r.readWALPosition()
    if err != nil {
        return err
    }

    replicationConn, err := pgx.Connect(context.Background(), r.replicationDns)
    if err != nil {
        return err
    }

server/logrepl/replication.go (lines 377-383)

if err != nil {
    if errors.Is(err, errShutdownRequested) {
        return nil
    }
    log.Println("Error during replication:", err)
    return err
}

Commit: 519faaa

View Full Run


Tell us how we did: Give Ito Feedback

@fulghum fulghum added the keep-alive prevent auto-closing pr label Jun 3, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 3, 2026

Main PR
Total 42090 42090
Successful 18095 18203
Failures 23995 23887
Partial Successes1 5375 5374
Main PR
Successful 42.9912% 43.2478%
Failures 57.0088% 56.7522%

${\color{red}Regressions (7)}$

join

QUERY:          create temp table b (x integer, y integer);
RECEIVED ERROR: relation "b" already exists (errno 1105) (sqlstate HY000)
QUERY:          create temp table c (
     name char not null,
     a char,
     constraint c_pk primary key (name)
);
RECEIVED ERROR: relation "c" already exists (errno 1105) (sqlstate HY000)
QUERY:          insert into c (name, a) values ('A', 'p');
RECEIVED ERROR: Unknown column 'name' in 'c' (errno 1054) (sqlstate HY000)
QUERY:          insert into c (name, a) values ('B', 'q');
RECEIVED ERROR: Unknown column 'name' in 'c' (errno 1054) (sqlstate HY000)
QUERY:          insert into c (name, a) values ('C', null);
RECEIVED ERROR: Unknown column 'name' in 'c' (errno 1054) (sqlstate HY000)
QUERY:          CREATE TEMP TABLE d (a int, b int);
RECEIVED ERROR: relation "d" already exists (errno 1105) (sqlstate HY000)
QUERY:          INSERT INTO d VALUES (1,3), (2,2), (3,1);
RECEIVED ERROR: number of values does not match number of columns provided (errno 1105) (sqlstate HY000)

${\color{lightgreen}Progressions (117)}$

alter_table

QUERY: alter table anothertab
  add unique(f1,f4);
QUERY: create index on at_partitioned (b);
QUERY: create index on at_partitioned (a);
QUERY: ALTER TABLE tt9 ADD CONSTRAINT tt9_c_key UNIQUE(c);
QUERY: ALTER TABLE ataddindex
  ADD UNIQUE (id),
  ADD FOREIGN KEY (ref_id) REFERENCES ataddindex (id);

constraints

QUERY: ALTER TABLE unique_tbl DROP CONSTRAINT unique_tbl_i_key;

copy2

QUERY: CREATE TEMP TABLE x (
	a serial,
	b int,
	c text not null default 'stuff',
	d text,
	e text
) ;
QUERY: CREATE TRIGGER trg_x_after AFTER INSERT ON x
FOR EACH ROW EXECUTE PROCEDURE fn_x_after();
QUERY: CREATE TRIGGER trg_x_before BEFORE INSERT ON x
FOR EACH ROW EXECUTE PROCEDURE fn_x_before();
QUERY: COPY x (a, b, c, d, e) from stdin;
QUERY: COPY x (a, b, c, d, e) from stdin;
QUERY: DROP TABLE x, y;

create_index

QUERY: create unique index on cwi_test (a);

incremental_sort

QUERY: create index on t (a);

indexing

QUERY: create index on idxpart (a);
QUERY: create index on idxpart1 (a, b);
QUERY: create index on idxpart (a, b);
QUERY: create index on idxpart (a);
QUERY: drop index idxpart_a_idx;
QUERY: create index on idxpart (a);
QUERY: create index on idxpart_temp(a);
QUERY: create index on idxpart1 (a) where b > 1;
QUERY: create index on idxpart (a);
QUERY: create index on idxpart (a);
QUERY: create index on only idxpart1 (a);
QUERY: create index on only idxpart (a);
QUERY: create index on idxpart1 (a);
QUERY: create index on idxpart (a);
QUERY: create index on idxpart1 (a);
QUERY: create index on idxpart (a);
QUERY: drop index idxpart_a_idx;
QUERY: create index on idxpart1 ((a + b));
QUERY: create index on idxpart ((a + b));
QUERY: create index on idxpart2 (a collate "POSIX");
QUERY: create index on idxpart2 (a);
QUERY: create index on idxpart2 (a collate "C");
QUERY: create index on idxpart (a collate "C");
QUERY: create index on idxpart2 (a);
QUERY: create index on idxpart (a text_pattern_ops);
QUERY: drop index idxpart_a_idx;

Footnotes

  1. These are tests that we're marking as Successful, however they do not match the expected output in some way. This is due to small differences, such as different wording on the error messages, or the column names being incorrect while the data itself is correct.

@itoqa
Copy link
Copy Markdown

itoqa Bot commented Jun 3, 2026

Ito Diff Report ❌

Tested: 519faaa705c36d
17 test cases ran this commit: 11 passed ✅, 1 fixed 🔧, 4 failed ❌, 1 additional finding ⚠️.
↪️ Carried forward from prior run (not retested this commit): 5 passing.

Across 17 test cases, 12 passed and 5 failed, showing that key behaviors mostly aligned with expectations, including bind-type inference when ParameterOIDs are omitted, relation-namespace collision handling and deterministic index auto-naming, explicit cast resolution/error paths, and targeted-database plus detached-head session behavior.
The most important confirmed defects were five real product bugs: high-severity replication startup can stay reachable after bootstrap failure, high-severity domain-cast can panic after type reload, medium-severity RETURNS TABLE functions are executed as scalar, high-severity SQL PREPARE/EXECUTE is not implemented, and medium-severity ON COMMIT DELETE ROWS/DROP is parsed but silently ignored (with replication and PREPARE/EXECUTE pre-existing, and the other three introduced by this PR).

❌ Failures (4)
Origin Category Severity Summary Screenshot
🆕 New Bf_integration 🟠 Medium Parser and AST accept ON COMMIT DELETE ROWS and ON COMMIT DROP, but execution ignores both semantics. BF_INTEGRATION-1
🆕 New Type ⚠️ High Reloaded domain/type graphs can panic during cast resolution when base type links remain unresolved. TYPE-1
🆕 New Type 🟠 Medium RETURNS TABLE SQL functions are treated as scalar returns, so multi-column execution/projection fails. TYPE-2
🔻 Still broken (verified) Replication ⚠️ High Server startup does not tear down running services after replication bootstrap failure. REPLICATION-3
🟠 ON COMMIT semantics are silently ignored
  • What failed: The server accepts both ON COMMIT clauses but still returns rows/table after commit instead of deleting rows or dropping the temp table.
  • Impact: Migration scripts that rely on PostgreSQL ON COMMIT temp-table lifecycle semantics can silently behave incorrectly. This can leave unexpected temporary state and produce misleading PostgreSQL-compatibility signals.
  • Steps to reproduce:
    1. Connect to Doltgres with psql.
    2. Run BEGIN; CREATE TEMP TABLE t_del (id INT) ON COMMIT DELETE ROWS; INSERT INTO t_del VALUES (1); COMMIT; SELECT count(*) FROM t_del;.
    3. Run BEGIN; CREATE TEMP TABLE t_drop (id INT) ON COMMIT DROP; INSERT INTO t_drop VALUES (1); COMMIT; SELECT count(*) FROM t_drop;.
  • Stub / mock context: A temporary domain-cast constraint gate was active in server/analyzer/domain_constraints.go via DOLTGRES_ENABLE_DOMAIN_CONSTRAINTS_ON_CASTS; ON COMMIT behavior itself was exercised without stubbing SQL responses or bypassing semantic checks.
  • Code analysis: I reviewed the parser grammar and the CREATE TABLE AST conversion path. The grammar explicitly accepts ON COMMIT DELETE ROWS and ON COMMIT DROP, while nodeCreateTable contains an explicit TODO and a switch that ignores those values rather than rejecting or implementing them.
  • Why this is likely a bug: Production code accepts these clauses in parsing and conversion but intentionally drops their semantics, creating a real parser-engine contract mismatch rather than a test setup artifact.

Relevant code:

server/ast/create_table.go (lines 31-40)

if len(node.StorageParams) > 0 {
    return nil, errors.Errorf("storage parameters are not yet supported")
}
// TODO: support tree.CreateTableOnCommitDrop and tree.CreateTableOnCommitDeleteRows
switch node.OnCommit {
case tree.CreateTableOnCommitDrop:
    // is unsupported and ignored
case tree.CreateTableOnCommitDeleteRows:
    // is unsupported and ignored
}

postgres/parser/parser/sql.y (lines 7824-7835)

| ON COMMIT PRESERVE ROWS
  {
    $$.val = tree.CreateTableOnCommitPreserveRows
  }
| ON COMMIT DELETE ROWS
  {
    $$.val = tree.CreateTableOnCommitDeleteRows
  }
| ON COMMIT DROP
  {
    $$.val = tree.CreateTableOnCommitDrop
  }
⚠️ Domain cast panic after type reload
  • What failed: Cast execution can panic instead of returning a bounded type-resolution error when domain base-type links are still unresolved after deserialization.
  • Impact: Reconnected sessions can crash on valid type-cast workflows, breaking core query execution for affected schemas. This can terminate in-flight operations instead of returning actionable SQL errors.
  • Steps to reproduce:
    1. Create a user-defined type plus domain/composite types that depend on it.
    2. Reconnect so those types are loaded through deserialization.
    3. Run a query or cast that evaluates the reloaded domain type.
  • Stub / mock context: The run used a local fallback Doltgres container on localhost with SCRAM auth bypass for deterministic login, and domain/cast behavior was exercised under that patched auth setup.
  • Code analysis: I inspected deserialization, domain-base resolution, and cast entrypoints. Deserialization intentionally creates unresolved placeholders, while cast setup/eval dereferences domain base types without guarding unresolved references.
  • Why this is likely a bug: The production cast path consumes unresolved domain links produced by production deserialization without a guard, which can trigger panic behavior instead of safe SQL errors.

Relevant code:

server/types/serialization.go (lines 247-255)

func prefillTypeDuringDeserialization(target id.Type) *DoltgresType {
	if target == id.NullType {
		return internalNullType
	}
	if builtin, ok := IDToBuiltInDoltgresType[target]; ok {
		return builtin
	}
	return NewUnresolvedDoltgresTypeFromID(target)
}

server/types/type.go (lines 535-540)

func (t *DoltgresType) DomainUnderlyingBaseType() *DoltgresType {
	if t.BaseTypeType.TypType == TypeType_Domain {
		return t.BaseTypeType.DomainUnderlyingBaseType()
	} else {
		return t.BaseTypeType
	}
}

server/expression/assignment_cast.go (lines 99-105)

// checkForDomainType returns the underlying type if the given type is a domain type. Casting always applies to the base
// type.
func checkForDomainType(t *pgtypes.DoltgresType) *pgtypes.DoltgresType {
	if t.TypType == pgtypes.TypeType_Domain {
		t = t.DomainUnderlyingBaseType()
	}
	return t
}
🟠 RETURNS TABLE executed as scalar
  • What failed: Function creation succeeds, but execution/projection fails because runtime enforces scalar-result semantics (expression does not result in a single value) for this table-returning function shape.
  • Impact: Table-returning SQL functions cannot reliably execute or be projected, blocking a meaningful database workflow for users relying on PostgreSQL-compatible function signatures.
  • Steps to reproduce:
    1. Create a SQL-language function declared with RETURNS TABLE and multiple output columns.
    2. Execute the function in a SELECT query.
    3. Project returned fields and apply casts.
  • Stub / mock context: Execution used the same local fallback Doltgres container with deterministic auth bypass; no route-level API mocks were used for this function path.
  • Code analysis: I inspected function AST conversion and SQL function runtime evaluation. RETURNS TABLE creates an anonymous composite return type, but the SetOf flag passed to runtime depends only on ReturnsSetOf, and runtime enforces single-column scalar output when that flag is false.
  • Why this is likely a bug: The production runtime branch enforces scalar semantics for a RETURNS TABLE shape, directly contradicting the declared function contract and causing deterministic execution failures.

Relevant code:

server/ast/create_function.go (lines 46-54)

} else if !node.ReturnsTable {
	// Return types may specify "trigger", but this doesn't apply elsewhere
	_, retType, err = nodeResolvableTypeReference(ctx, node.RetType[0].Type, true)
	if err != nil {
		return nil, err
	}
} else {
	retType = createAnonymousCompositeType(node.RetType)
}

server/ast/create_function.go (lines 157-170)

Statement: pgnodes.NewCreateFunction(
	tableName.Table(),
	tableName.Schema(),
	node.Replace,
	retType,
	params,
	strict,
	ctx.originalQuery,
	extensionName,
	extensionSymbol,
	parsedBody,
	sqlDef,
	sqlDefParsedStmts,
	node.ReturnsSetOf,

server/functions/framework/sql_function.go (lines 179-187)

if !f.SetOf {
	rows, err := sql.RowIterToRows(subCtx, rowIter)
	if err != nil {
		return nil, err
	}
	// single column row result
	if len(sch) != 1 {
		return nil, errors.New("expression does not result in a single value")
	}
⚠️ Server remains reachable after replication bootstrap failure
  • What failed: Startup returns a replication error, but the already-started controller is not stopped, so the service can remain live instead of failing atomically and fully tearing down.
  • Impact: Replication-enabled startups can leave a partially running server after a bootstrap failure, creating inconsistent runtime state and misleading health signals. This can break restart/recovery expectations for operators and automation.
  • Steps to reproduce:
    1. Configure replication so validation passes but bootstrap initialization fails at runtime.
    2. Start the server and observe startup returns a replication bootstrap error.
    3. Immediately check the SQL or metrics endpoint and confirm the service is still reachable despite startup failure.
  • Stub / mock context: The run used a local fallback server setup with temporary auth/environment patches and a replication scenario configured to fail bootstrap deterministically; real production auth and infrastructure were bypassed to isolate startup behavior under controlled failure conditions.
  • Code analysis: I reviewed the startup sequence and replication initialization in server/server.go; the controller is started and confirmed before replication bootstrap, and the immediate replication error path returns without explicit controller shutdown. PR diff context includes edits in this file but does not change the failing cleanup branch, so this defect appears pre-existing.
  • Why this is likely a bug: The code starts and validates the server controller before replication bootstrap, then returns on replication init error without teardown, which directly enables the partial-start state observed by the test.

Relevant code:

server/server.go (lines 151-164)

controller := svcs.NewController()
newCtx, cancelF := context.WithCancel(ctx)
go func() {
	if controller.WaitForStart() == nil {
		<-ctx.Done()
		controller.Stop()
		cancelF()
	}
}()

server/server.go (lines 175-193)

go controller.Start(newCtx)

err = controller.WaitForStart()
if err != nil {
	return nil, err
}

_, err = startReplication(cfg, ssCfg)
if err != nil {
	return nil, err
}

server/server.go (lines 268-270)

cli.Println("Starting replication")
go replicator.StartReplication(*cfg.PostgresReplicationConfig.SlotName)
return replicator, nil
✅ Bugs Fixed (1)
Category Summary Screenshot
Planner Bind type inference works for omitted ParameterOIDs; mixed int/text binds returned the expected row after environment recovery. PLANNER-1
✅ Verified Passing (11)
Category Summary Screenshot
Cast Explicit cast to a defined user type succeeded through the prepared Parse/Bind path with typed output metadata. CAST-1
Cast Explicit casts to missing and shell-only target types failed early with the expected type resolution errors. CAST-2
Commit Re-executed successfully: ON COMMIT DELETE ROWS syntax is accepted and rows remain after COMMIT in same session (current behavior). COMMIT-1
Commit Re-executed successfully: ON COMMIT DROP syntax is accepted and temp table still exists after COMMIT (current behavior). COMMIT-2
Commit CREATE TABLE with storage parameters, CREATE UNLOGGED TABLE, and CREATE TABLE AS ... WITH NO DATA were all rejected with explicit unsupported errors. COMMIT-3
Namespace CREATE TABLE using an existing sequence name was correctly rejected with a relation-already-exists error. NAMESPACE-1
Namespace CREATE SEQUENCE IF NOT EXISTS behaved as a no-op and preserved a single existing table relation. NAMESPACE-2
Namespace CREATE OR REPLACE VIEW over an existing table produced the expected type-specific "is not a view" error on the verified Doltgres runtime. NAMESPACE-3
Namespace Generated index names followed PostgreSQL-style _key/_idx naming with deterministic numeric suffixing on collisions. NAMESPACE-4
Session DDL applied only to the explicitly targeted database; no cross-database bleed. SESSION-1
Session Detached-head write returned success without persistence, matching expected detached behavior. SESSION-2
↪️ Inherited from Prior Run (5)

Tests that passed in the prior run. c3 judged them unaffected by the diff and did not retest.

Category Summary Screenshot
Bootstrap Server started with fresh empty data directory and default bootstrap credentials; first connection to postgres/password succeeded and current_database() returned postgres, confirming default database provisioning. N/A
Handshake Authentication remained enforced; invalid credentials were rejected and valid credentials succeeded. N/A
Handshake Valid postgres/password SCRAM startup completed and SELECT 1 succeeded. N/A
Replication Replication worker starts successfully with complete configuration and healthy keepalive behavior. N/A
Replication Retry policy enforces terminal stop at the configured threshold, with no infinite retries after endpoint restoration. N/A
⚠️ Additional Findings (1)

These findings are unrelated to the current changes but were observed during testing.

Origin Category Severity Summary Screenshot
🆕 New Bf_order ⚠️ High Runner case BF-ORDER-1 cannot validate cast timing because SQL PREPARE and EXECUTE paths return hardcoded unsupported errors. BF_ORDER-1
⚠️ Prepare and execute statements are not implemented
  • What failed: The statement fails immediately with "PREPARE is not yet supported" instead of entering prepared execution, so phase-consistent cast-failure timing across prepare/execute cannot be validated.
  • Impact: Clients and tools that depend on SQL prepared statements cannot use this workflow, and cast-stage behavior under prepare/execute cannot be exercised at all. This blocks a core compatibility path for prepared-statement-driven integrations.
  • Steps to reproduce:
    1. Start the server and connect with a PostgreSQL client.
    2. Run PREPARE qa_stmt AS SELECT 1::int;.
    3. Run EXECUTE qa_stmt;.
    4. Observe that the server rejects the request as unsupported before prepared execution begins.
  • Stub / mock context: The same auth/bootstrap and SCRAM/domain-constraint bypass edits from earlier execution remained active, and a temporary PREPARE/EXECUTE source injection was attempted but could not be exercised because the patched server could not be restarted. The observed failure came from the running application behavior that still returned unsupported PREPARE/EXECUTE errors.
  • Code analysis: I inspected the production AST handlers for *tree.Prepare and *tree.Execute; both return unconditional NotYetSupportedError responses, so the failure is directly caused by product code rather than test setup.
  • Why this is likely a bug: The runtime error exactly matches unconditional unsupported returns in production code, so the failure is deterministic application behavior, not mock/setup interference.

Relevant code:

server/ast/prepare.go (lines 23-30)

// nodePrepare handles *tree.Prepare nodes.
func nodePrepare(ctx *Context, node *tree.Prepare) (vitess.Statement, error) {
	if node == nil {
		return nil, nil
	}

	return NotYetSupportedError("PREPARE is not yet supported")
}

server/ast/execute.go (lines 23-30)

// nodeExecute handles *tree.Execute nodes.
func nodeExecute(ctx *Context, node *tree.Execute) (vitess.Statement, error) {
	if node == nil {
		return nil, nil
	}

	return NotYetSupportedError("EXECUTE is not yet supported")
}

View Full Run


Tell us how we did: Give Ito Feedback

@fulghum fulghum merged commit 09da6c3 into main Jun 3, 2026
22 checks passed
@fulghum fulghum deleted the coffeegoddd-990a03cd branch June 3, 2026 16:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dolt-bump keep-alive prevent auto-closing pr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants